<?php
namespace Home\Controller;
use Think\Controller;
class PayController extends Controller {
    public function aliPayApi(){
    	/*******************生成订单号操作数据库*********************/
    	$user_id=$_SESSION['user']['id'];
    	if(!$user_id){
    		$this->error("请登录",U("Home/Login/login"));	
    	}
    	$order_sn=date("YmdHis").rand(1000,9999);

    	//付款金额
        $total_fee = $_POST['WIDtotal_fee'];
        if(!$total_fee){
        	$this->error("请输入充值金额",U("Home/User/index"));
        }

    	$data=array(
    		'user_id'=>$user_id,
    		'out_trade_no'=>$order_sn,
    		'money'=>$total_fee,
    		'recharge_time'=>date("Y-m-d H:i:s")
    		);

    	$res=M('recharge')->add($data);
    	if(!$res){
    		$this->error("",U("Home/User/index"));
    	}

    	/************************************************************/
    	require_once("/Public/alipay/alipay.config.php");
		require_once("/Public/alipay/lib/alipay_submit.class.php");

    	$payment_type = "1";
        //必填，不能修改
        //服务器异步通知页面路径
        $notify_url = "http://".$_SERVER['SERVER_NAME']."/Home/Pay/notifyUrl";
        //需http://格式的完整路径，不能加?id=123这类自定义参数

        //页面跳转同步通知页面路径
        $return_url = "http://".$_SERVER['SERVER_NAME']."/Home/User/index";
        //需http://格式的完整路径，不能加?id=123这类自定义参数，不能写成http://localhost/

        //商户订单号
        $out_trade_no = $order_sn;
        //商户网站订单系统中唯一订单号，必填

        //订单名称
        $subject = "用户充值";
        //必填

        
        //必填

        //订单描述

        $body = "";
        //商品展示地址
        $show_url = "";
        //需以http://开头的完整路径，例如：http://www.商户网址.com/myorder.html

        //防钓鱼时间戳
        $anti_phishing_key = "";
        //若要使用请调用类文件submit中的query_timestamp函数

        //客户端的IP地址
        $exter_invoke_ip = "";
        //非局域网的外网IP地址，如：221.0.0.1

        /************************************************************/

		//构造要请求的参数数组，无需改动
		$parameter = array(
				"service" => "create_direct_pay_by_user",
				"partner" => trim($alipay_config['partner']),
				"seller_email" => trim($alipay_config['seller_email']),
				"payment_type"	=> $payment_type,
				"notify_url"	=> $notify_url,
				"return_url"	=> $return_url,
				"out_trade_no"	=> $out_trade_no,
				"subject"	=> $subject,
				"total_fee"	=> $total_fee,
				"body"	=> $body,
				"show_url"	=> $show_url,
				"anti_phishing_key"	=> $anti_phishing_key,
				"exter_invoke_ip"	=> $exter_invoke_ip,
				"_input_charset"	=> trim(strtolower($alipay_config['input_charset']))
		);

		//建立请求
		$alipaySubmit = new \AlipaySubmit($alipay_config);
		

		$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");

		$html_top='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>支付宝即时到账交易接口接口</title></head>';
		$html_foot='</body></html>';
		echo $html_top.$html_text.$html_foot;
 
    }

    //回调地址
    public function notifyUrl(){
    	require_once("/Public/alipay/alipay.config.php");
		require_once("/Public/alipay/lib/alipay_notify.class.php");
		//计算得出通知验证结果
		$alipayNotify = new \AlipayNotify($alipay_config);
		$verify_result = $alipayNotify->verifyNotify();

		if($verify_result) {//验证成功

			
			//商户订单号

			$out_trade_no = $_POST['out_trade_no'];

			//支付宝交易号

			$trade_no = $_POST['trade_no'];

			//交易状态
			$trade_status = $_POST['trade_status'];


		    if($_POST['trade_status'] == 'TRADE_FINISHED') {
				//判断该笔订单是否在商户网站中已经做过处理
					//如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
					//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
					//如果有做过处理，不执行商户的业务程序
						
				//注意：
				//退款日期超过可退款期限后（如三个月可退款），支付宝系统发送该交易状态通知

		        //调试用，写文本函数记录程序运行情况是否正常
		        //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
		    }
		    else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
				$rechargeModel=M('recharge');
				$userModel=M('user');
		    	$order_info=$rechargeModel->where('out_trade_no='.$out_trade_no)->find();
		    	if(!$order_info){
		    		echo "fail"; exit;
		    	}
		    	if($order_info['state']=='0'){
		    		$data=array(
		    			'id'=>$order_info['id'],
		    			'trade_no'=>$trade_no,
		    			'state'=>'1'
		    			);
		    		$rechargeModel->startTrans();
		    		
		    		$rechargeRes=$rechargeModel->save($data);

		    		$user_money=$userModel->where('id='.$order_info['user_id'])->getField('money');
		    		if($user_money){
		    			$money=$user_money+$order_info['money'];
		    		}else{
		    			$money=$order_info['money'];
		    		}
		    		$userData=array(
		    			'id'=>$order_info['user_id'],
		    			'money'=>$money
		    			);
		    		$userRes=$userModel->save($userData);
		    		if($rechargeRes && $userRes){
		    			 	$rechargeModel->commit();
		    			}else{
		    				$rechargeModel->rollback(); 
		    			}


		    	}



		    }

			
		        
			echo "success";		//请不要修改或删除
			
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		}
		else {
		    //验证失败
		    echo "fail";

		}


    }

}